package com.gupt.youhd.service.impl;/*
@author name
@data 2023/6/17-17:21
*/


import com.alibaba.fastjson.JSONObject;
import com.gupt.youhd.entity.User;
import com.gupt.youhd.exception.BusinessException;
import com.gupt.youhd.mapper.UserMapper;
import com.gupt.youhd.service.WXLoginService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.Date;

@Slf4j
@Service
public class WXLoginServiceImpl implements WXLoginService {

    @Autowired
    private RestTemplate restTemplate;

    @Value("${wx.online_people_url}")
    private String URL;
    @Value("${wx.appId}")
    private String AppId;  //公众平台自己的appId
    @Value("${wx.appSecret}")
    private String AppSecret;  //AppSecret

    @Autowired
    private UserMapper userMapper;


//    @Override
//    public WXLoginMsg wxLogin(String code) {
//
//
//        String url =  URL +
//                "appid=" + AppId +
//                "&secret=" + AppSecret +
//                "&js_code=" + code +
//                "&grant_type=authorization_code";
//
//        log.info("后端生成的url:{}",url);
//
//        //利用spring原生http请求工具对接口进行请求
//        String jsonData = restTemplate.getForObject(url,String.class);
//        JSONObject jsonObject = JSONObject.parseObject(jsonData);
//        //请求返回的是Json类型的数据 所以我们需要用到fastjson
//        //这个判断是判断我们的请求是否出错，如果没有出错的话就能够拿到openid
//        if (StringUtils.contains(jsonData, "errcode")) {
//            //出错了
//            throw new BusinessException("获取openid失败");
//        }
//        String openid = jsonObject.getString("openid");
//        String sessionKey = jsonObject.getString("session_key");
//        String unionid = jsonObject.getString("unionid"); // 若要开发多个微信应用，应当获取微信用户的唯一标识 unionid。
//
//        WXLoginMsg loginMsg = new WXLoginMsg();
//        loginMsg.setOpenid(openid);
//        loginMsg.setSessionKey(sessionKey);
//
//        User user = new User();
//        user.setOpenid(openid);
//        user.setCreateTime(new Date());
//        userMapper.insertUserByOpenid(user);
//
//        return loginMsg;
//    }


    /**
     * 微信登陆，解密encryptedData数据。
     *     但因为微信调整了用户信息权限，只能获取unionid，不能再获取头像、昵称、性别、地区等信息。
     *     unionid，微信用户的唯一标识（相当于微信用户ID），若想在公众号、小程序、开放平台等地方使用同一个账号，则使用unionid
     * @param encryptedData 被加密的数据
     * @param signature 加密秘钥（即getSessionKey方法返回的sessionKey）
     * @param iv 偏移量
     * @return 解密后的encryptedData（用户信息）
     */

//    @Override
//    public String getUserInfo(String encryptedData, String signature, String iv) {
//
//        // 被加密的数据
//        byte[] dataByte = Base64.getDecoder().decode(encryptedData);
//        // 加密秘钥
//        byte[] keyByte = Base64.getDecoder().decode(signature);
//        // 偏移量
//        byte[] ivByte = Base64.getDecoder().decode(iv);
//
//        log.error("被加密的数据 encryptedData= "+encryptedData);
//        log.error("加密秘钥 sessionKey= "+signature);
//        log.error("偏移量 iv= "+iv);
//
//        //hutool AES解密
//        AES aes = new AES("CBC","PKCS7Padding",keyByte,ivByte);
//        String res = aes.decryptStr(dataByte);
//        log.info("---解密后 ="+res);
//        // 解密并返回
//        return JSONResult.ok(res);
//    }
}
